{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Quick start"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "PHIDL allows you to create complex designs from simple shapes, and can output the result as GDSII files. The basic element of PHIDL is the `Device`, which is just a GDS cell with some additional functionality (for those unfamiliar with GDS designs, it can be thought of as a blank area to which you can add polygon shapes). The polygon shapes can also have `Port`s on them--these allow you to snap shapes together like Lego blocks. You can either hand-design your own polygon shapes, or there is a large library of pre-existing shapes you can use as well."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Brief introduction\n",
    "\n",
    "This first section is an extremely short tutorial meant to give you an idea of what PHIDL can do.  For a more detailed tutorial, please read the following \"The basics of PHIDL\" section and the other tutorials.\n",
    "\n",
    "We'll start with some boilerplate imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from phidl import Device\n",
    "from phidl import quickplot as qp # Rename \"quickplot()\" to the easier \"qp()\"\n",
    "import phidl.geometry as pg"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then let's create a blank Device (essentially an empty GDS cell with some special features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "D = Device('mydevice')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next let's add a custom polygon using lists of x points and y points.  You can also add polygons pair-wise like `[(x1,y1), (x2,y2), (x3,y3), ... ]`.  We'll also image the shape using the handy `quickplot()` function (imported here as `qp()`)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xpts = (0,10,10, 0)\n",
    "ypts = (0, 0, 5, 3)\n",
    "poly1 = D.add_polygon( [xpts, ypts], layer = 0)\n",
    "\n",
    "qp(D) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also create new geometry using the built-in geometry library:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "T = pg.text('Hello!', layer = 1)\n",
    "A = pg.arc(radius = 25, width = 5, theta = 90, layer = 3)\n",
    "\n",
    "qp(T) # quickplot it!\n",
    "qp(A) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can easily add these new geometries to `D`, which currently contains our custom polygon. (For more details about references see below, or the tutorial called \"Understanding References\".)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "text1 = D.add_ref(T) # Add the text we created as a reference\n",
    "arc1 = D.add_ref(A) # Add the arc we created\n",
    "\n",
    "qp(D) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that the geometry has been added to `D`, we can move and rotate everything however we want:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "text1.movey(5)\n",
    "text1.movex(-20)\n",
    "arc1.rotate(-90)\n",
    "arc1.move([10,22.5])\n",
    "poly1.ymax = 0\n",
    "\n",
    "qp(D) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also connect shapes together using their `Port`s, allowing us to snap shapes together like Legos.  Let's add another arc and snap it to the end of the first arc:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "arc2 = D.add_ref(A) # Add a second reference the arc we created earlier\n",
    "arc2.connect(port = 1, destination = arc1.ports[2])\n",
    "\n",
    "qp(D) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That's it for the very basics!  Keep reading for a more detailed explanation of each of these, or see the other tutorials for topics such as using Groups, creating smooth Paths, and more."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The basics of PHIDL\n",
    "\n",
    "This is a longer tutorial meant to explain the basics of PHIDL in a little more depth.  Further explanation can be found in the other tutorials as well.\n",
    "\n",
    "PHIDL allows you to create complex designs from simple shapes, and can output the result as GDSII files. The basic element of PHIDL is the `Device`, which can be thought of as a blank area to which you can add polygon shapes. The polygon shapes can also have `Port`s on them--these allow you to snap shapes together like Lego blocks. You can either hand-design your own polygon shapes, or there is a large library of pre-existing shapes you can use as well.\n",
    "\n",
    "### Creating a custom shape\n",
    "\n",
    "Let's start by trying to make a rectangle shape with ports on either end."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from phidl import quickplot as qp\n",
    "from phidl import Device\n",
    "import phidl.geometry as pg\n",
    "\n",
    "\n",
    "# First we create a blank device `R` (R can be thought of as a blank \n",
    "# GDS cell with some special features). Note that when we\n",
    "# make a Device, we usually assign it a variable name with a capital letter\n",
    "R = Device('rect')\n",
    "\n",
    "# Next, let's make a list of points representing the points of the rectangle\n",
    "# for a given width and height\n",
    "width = 10\n",
    "height = 3\n",
    "points =  [(0, 0), (width, 0), (width, height), (0, height)]\n",
    "\n",
    "# Now we turn these points into a polygon shape using add_polygon()\n",
    "R.add_polygon(points)\n",
    "\n",
    "# Let's use the built-in \"quickplot\" function to display the polygon we put in D\n",
    "qp(R)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, let's add `Port`s to the rectangle which will allow us to connect it to other shapes easily"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Ports are defined by their width, midpoint, and the direction (orientation) they're facing\n",
    "# They also must have a name -- this is usually a string or an integer\n",
    "R.add_port(name = 'myport1', midpoint = [0,height/2], width = height, orientation = 180)\n",
    "R.add_port(name = 'myport2', midpoint = [width,height/2], width = height, orientation = 0)\n",
    "\n",
    "# The ports will show up when we quickplot() our shape\n",
    "qp(R) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can check to see that our Device has ports in it using the `print` command:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Device (name \"rect\" (uid 4), ports ['myport1', 'myport2'], aliases [], 1 polygons, 0 references)\n"
     ]
    }
   ],
   "source": [
    "print(R)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looks good!\n",
    "\n",
    "### Library & combining shapes\n",
    "\n",
    "Since this Device is finished, let's create a new (blank) Device and add several shapes to it. Specifically, we will add an arc from the built-in geometry library and two copies of our rectangle Device.  We'll then then connect the rectangles to both ends of the arc.  The `arc()` function is contained in the `phidl.geometry` library which as you can see at the top of this example is imported with the name `pg`.\n",
    "\n",
    "This process involves adding \"references\".  These references allow you to create a Device shape once, then reuse it many times in other Devices. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create a new blank Device\n",
    "E = Device('arc_with_rectangles')\n",
    "\n",
    "# Also create an arc from the built-in \"pg\" library\n",
    "A = pg.arc(width = 3)\n",
    "\n",
    "# Add a \"reference\" of the arc to our blank Device\n",
    "arc_ref = E.add_ref(A)\n",
    "\n",
    "# Also add two references to our rectangle Device\n",
    "rect_ref1 = E.add_ref(R)\n",
    "rect_ref2 = E.add_ref(R)\n",
    "\n",
    "# Move the shapes around a little\n",
    "rect_ref1.move([-10,0])\n",
    "rect_ref2.move([-5,10])\n",
    "\n",
    "qp(E) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can see we have added 3 shapes to our Device \"E\": two references to our rectangle Device, and one reference to the arc Device. We can also see that all the references have `Port`s on them, shown as the labels \"myport1\", \"myport2\", \"1\" and \"2\".\n",
    "\n",
    "Next, let's snap everything together like Lego blocks using the `connect()` command."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# First, we recall that when we created the references above we saved\n",
    "# each one its own variable: arc_ref, rect_ref1, and rect_ref2\n",
    "# We'll use these variables to control/move the reference shapes.\n",
    "\n",
    "# First, let's move the arc so that it connects to our first rectangle.\n",
    "# In this command, we tell the arc reference 2 things: (1) what port\n",
    "# on the arc we want to connect, and (2) where it should go\n",
    "arc_ref.connect(port = 1, destination = rect_ref1.ports['myport2'])\n",
    "\n",
    "qp(E) # quickplot it!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Then we want to move the second rectangle reference so that\n",
    "# it connects to port 2 of the arc\n",
    "rect_ref2.connect('myport1', arc_ref.ports[2])\n",
    "\n",
    "qp(E) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looks great!\n",
    "\n",
    "### Going a level higher\n",
    "\n",
    "Now we've made a (somewhat) complicated bend-shape from a few simple shapes.  But say we're not done yet -- we actually want to combine together 3 of these bend-shapes to make an even-more complicated shape.  We could recreate the geometry 3 times and manually connect all the pieces, but since we already put it together once it will be smarter to just reuse it multiple times.\n",
    "\n",
    "We will start by abstracting this bend-shape.  As shown in the quickplot, there are ports associated with each reference in our bend-shape Device `E`: \"myport1\", \"myport2\", \"1\", and \"2\".  But when working with this bend-shape, all we really care about is the 2 ports at either end -- \"myport1\" from `rect_ref1` and \"myport2\" from `rect_ref2`. It would be simpler if we didn't have to keep track of all of the other ports.\n",
    "\n",
    "First, let's look at something: let's see if our bend-shape Device `E` has any ports in it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Device (name \"arc_with_rectangles\" (uid 5), ports [], aliases [], 0 polygons, 3 references)\n"
     ]
    }
   ],
   "source": [
    "print(E)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It has no ports apparently!  Why is that, when we clearly see ports in the quickplots above?\n",
    "\n",
    "The answer is that Device `E` *itself* doesn't have ports -- the references inside `E` do have ports, but we never actually added ports to `E`.  Let's fix that now, adding a port at either end, setting the names to the integers 1 and 2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Rather than specifying the midpoint/width/orientation, we can instead\n",
    "# copy ports directly from the references since they're already in the right place\n",
    "E.add_port(name = 1, port = rect_ref1.ports['myport1'])\n",
    "E.add_port(name = 2, port = rect_ref2.ports['myport2'])\n",
    "\n",
    "qp(E) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we look at the quickplot above, we can see that there are now red-colored ports on both ends.  Ports that are colored red are owned by the Device, ports that are colored blue-green are owned by objects inside the Device. This is good!  Now if we want to use this bend-shape, we can interact with its ports named 1 and 2.  \n",
    "\n",
    "Let's go ahead and try to string 3 of these bend-shapes together:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create a blank Device\n",
    "D = Device('triple-bend')\n",
    "\n",
    "# Add 3 references to our bend-shape Device `E`:\n",
    "bend_ref1 = D.add_ref(E)  # Using the function add_ref()\n",
    "bend_ref2 = D << E        # Using the << operator which is identical to add_ref()\n",
    "bend_ref3 = D << E\n",
    "\n",
    "# Let's mirror one of them so it turns right instead of left\n",
    "bend_ref2.mirror()\n",
    "\n",
    "# Connect each one in a series\n",
    "bend_ref2.connect(1, bend_ref1.ports[2])\n",
    "bend_ref3.connect(1, bend_ref2.ports[2])\n",
    "\n",
    "# Add ports so we can use this shape at an even higher-level\n",
    "D.add_port(name = 1, port = bend_ref1.ports[1])\n",
    "D.add_port(name = 2, port = bend_ref3.ports[2])\n",
    "\n",
    "qp(D) # quickplot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Saving as a GDSII file\n",
    "\n",
    "Saving the design as a GDS file is simple -- just specify the Device you'd like to save and run the `write_gds()` function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'triple-bend.gds'"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.write_gds('triple-bend.gds')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Some useful notes about writing GDS files:\n",
    "\n",
    "- The default unit is  1e-6 (micrometers aka microns), with a precision of 1e-9 (nanometer resolution)\n",
    "- PHIDL will automatically handle naming of all the GDS cells to avoid name-collisions.\n",
    "- Unless otherwise specified, the top-level GDS cell will be named \"toplevel\"\n",
    "\n",
    "All of these parameters can be modified using the appropriate arguments of `write_gds()`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'triple-bend.gds'"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.write_gds(filename = 'triple-bend.gds', # Output GDS file name\n",
    "            unit = 1e-6,                  # Base unit (1e-6 = microns)\n",
    "            precision = 1e-9,             # Precision / resolution (1e-9 = nanometers)\n",
    "            auto_rename = True,           # Automatically rename cells to avoid collisions\n",
    "            max_cellname_length = 28,     # Max length of cell names\n",
    "            cellname = 'toplevel'         # Name of output top-level cell\n",
    "           )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
